// 和网络中获取一些ip地址等信息相关的函数
#include <arpa/inet.h>

#include "net/socket.h"
#include "net/netglobal.h"
#include "my_string.h"

// 将socket绑定的地址转换为文本格式,返回值是字符串长度
// 参数sa：客户端的ip地址信息
// 参数port：1表示要把端口信息也放到组合成的字符串里，0则不包含端口信息
// 参数text：文本内容
// 参数len：文本的宽度
size_t CSocket::Sock_ntop(struct sockaddr *sa, int port, u_char *text, size_t len){
    struct sockaddr_in *sin;
    u_char *p;

    switch (sa->sa_family){
        case AF_INET:
        {
            sin = (struct sockaddr_in *) sa;
            p = (u_char *) &sin->sin_addr;
            if(port){
                // 有端口信息就组合到字符串中
                p = Snprintf(text, len, "%ud.%ud.%ud.%ud:%d",p[0], p[1], p[2], p[3], ntohs(sin->sin_port)); 
            }
            else{
                // 没有就不组合了
                p = Snprintf(text, len, "%ud.%ud.%ud.%ud",p[0], p[1], p[2], p[3]);
            }
            return (p - text);
            break;
        }
        // 只接受IPV4
        default:
        {
            return 0;
            break;
        }  
    }
    return 0; 
}